/**
 * 
 */
package cn.edu.bjtu.entity;

import cn.edu.bjtu.entity.impl.FailedExecuteResult;

/**
 * 命令的执行环境
 * 主要是用于建立特征提取模型那里那个地方
 * 比如TFIDF 比如WORD2VEC 比如LDA等
 * 对于简单的同步命令可以用ExecuteContext作为缓存
 * @author alex
 * @see Command
 * @see ExecuteResult
 */
public interface ExecuteContext {
	/**
	 * 是否清空上次结果
	 * @return
	 */
	boolean isNoCache();
	String getInputDir();
	String getOutPutDir();
	/**
	 * 是否异步,同步的话直接返回,阻塞当前TOMCAT线程,直到命令执行完,期间浏览器是一片空白.或者一直有加载动画
	 * 如果是异步的话,提交任务之后就返回了.但是肯定是得不到结果的.
	 * @return
	 */
	boolean isAsync();
	/**
	 * 执行环境开始执行,这个方法一般在Command中调用.触发逻辑
	 * 执行所需要的数据存放在ExecuteContext中,所以执行完成之后的结果也放在ExecuteContext中
	 * 所以ExecuteContext中一般也实现ExecuteReult根据同步或者异步返回不同类型的ExecuteResult
	 * 如果失败就返回FailedExecuteReuslt
	 * 同步返回的如 {@link TFIDFCommand} 异步返回如{@link Word2VecCommand} 
	 * @see ExecuteContext
	 * @see ExecuteResult
	 * @see FailedExecuteResult
	 * @see Command
	 */
	void fire();
	/**
	 * 模型是否已经建立,或者载入
	 * 
	 */
	boolean isExist();
}
